Qt 中C++ async实现并行处理 |
您所在的位置:网站首页 › qt for循环效率 › Qt 中C++ async实现并行处理 |
在项目中,难免遇到性能问题,为了提高处理的性能,针对可以并行处理的部分单独提取出来,利用并行编程来提高处理的速度,从而实现高性能。C++11中有一个async()函数,非常方便的实现异步处理。 每次调用async()函数,会自动创建一个线程来进行处理,并返回一个future 未来变量,根据future变量,可以获取返回值。 async函数解析函数原型如下: /// Launch code for futures enum class launch { async = 1, deferred = 2 }; template using __async_result_of = typename result_of::type; template future async(launch __policy, _Fn&& __fn, _Args&&... __args); 1、入参1.1 launch __policy 异步处理的策略,包括两种: async 和 deferred async = 1, // 调用async函数的时候就已经运行程序了 deferred = 2 // 延迟运行,当返回的future调用get函数时开始运行异步处理函数。1.2 _Fn&& __fn 异步处理的函数 1.3 _Args&&… __args 异步处理函数的输入参数。 简单的函数模型为: async(异步策略, 异步处理函数(lamda表达式比较方便), 异步处理函数的参数) int func(int a) { std::cout std::cout // for循环对每个线程启动async处理 futureList[i] = std::async(std::launch::async, [&](int start, int end) { // policy是async,代表程序运行到这个地方,就已经开始运行后面的lamda表达式了 for (int j = start; j futureList[i].wait(); // 等待所有线程结束 } return; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |